package com.ilearn.iodata.iolingo.service.metadata.core.edm.mapper.api;

import java.util.List;
import java.util.Set;

/**
 * Created by lyndon on 2018/5/29.
 */
public interface AbstractQuery<T> extends CommonAbstractCriteria {
    <X> Root<X> from(Class<X> var1);

    <X> Root<X> from(EntityType<X> var1);

    AbstractQuery<T> where(Expression<Boolean> var1);

    AbstractQuery<T> where(Predicate... var1);

    AbstractQuery<T> groupBy(Expression... var1);

    AbstractQuery<T> groupBy(List<Expression<?>> var1);

    AbstractQuery<T> having(Expression<Boolean> var1);

    AbstractQuery<T> having(Predicate... var1);

    AbstractQuery<T> distinct(boolean var1);

    Set<Root<?>> getRoots();

    Selection<T> getSelection();

    List<Expression<?>> getGroupList();

    Predicate getGroupRestriction();

    boolean isDistinct();

    Class<T> getResultType();
}